package cn.com.dcsgo.sdk.payment.wechat.ltzf.payments.jsapi.model;

import cn.com.dcsgo.sdk.payment.wechat.ltzf.utils.SignUtils;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 订单退款请求实体类
 *
 * @author Dcsgo
 * @since 2024/8/15 16:01
 */
@Data
public class RefundOrderRequest {
    /**
     * 商户号
     */
    @JsonProperty("mch_id")
    private String mchId;
    /**
     * 商户订单号
     */
    @JsonProperty("out_trade_no")
    private String outTradeNo;
    /**
     * 商户退款单号，只能是数字、大小写字母_-且在同一个商户号下唯一
     */
    @JsonProperty("out_refund_no")
    private String outRefundNo;
    /**
     * 当前时间戳(秒)
     */
    @JsonProperty("timestamp")
    private String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
    /**
     * 退款金额
     */
    @JsonProperty("refund_fee")
    private String refundFee;
    /**
     * 退款描述
     */
    @JsonProperty("refund_desc")
    private String refundDesc;
    /**
     * 退款通知地址，通知URL必须为直接可访问的URL，不允许携带查询串，要求必须为http或https地址
     */
    @JsonProperty("notify_url")
    private String notifyUrl;

    /**
     * 根据其他必要信息和商户密钥生成签名
     *
     * @param partnerKey 商户密钥
     * @return 签名
     */
    public String createSign(String partnerKey) {
        Map<String, String> params = new HashMap<>();
        params.put("mch_id", getMchId());
        params.put("out_trade_no", getOutTradeNo());
        params.put("out_refund_no", getOutRefundNo());
        params.put("timestamp", getTimestamp());
        params.put("refund_fee", getRefundFee());
        return SignUtils.createSign(params, partnerKey);
    }
}
